// 函数的定义
  // 函数声明法
  function run ():string {
    return 'run'
  }
  // 匿名函数
  var run2 = function():number {
    return 123
  }

// 方法 -- 可选参数
// es5里面方法的实参和形参可以不一样，但是ts中必须一样，如果不一样就需要配置可选参数
// 注意：可选参数必须配置参数的最后面
function getInfo(name:string, age?:number):string {
  if (age) return `${name} --- ${age}`
  else return `${name}`
}
console.log(getInfo('zhangsan'));


// 默认参数（也是可选参数）
  // es5没法设置默认参数，es6和ts可以设置
  function getInfo2(name:string, age:number=20):string {
    return `${name} --- ${age}`
  }
  console.log(getInfo2('张三'))
  console.log(getInfo2('张三', 30))


// ts中的函数重载
  // es5中出现同名方法，下面的会替换上面的方法
  // ts中的重载：通过为同一个函数提供多个函数类型定义来实现多种功能的目的
function getInfo3(name: string): string
function getInfo3(age: number): string
function getInfo3(str: any): any {
  if(typeof str === 'string') {
    return '我叫：'+str
  }else{
    return '我的年龄是'+str
  }
}

// 三点运算符，接受新参传过来的值
function sum(...result: number[]): number {
  var sum = 0
  for(let i=0; i<result.length; i++) {
    sum = sum + result[i]
  }
  return sum
}



export {}